from PyQt5.Qt import *
from widget.my_window import MyWindow
import requests
import json
from lxml import etree
from widget.info_box import InfoBox
import configparser
from widget.db_init.peewee import testModel229_dp
from widget.db_init.configuration import sql_configuration as LM
from widget.db_init.sqlUtils.mysqlUtils import MySqlOp
import _thread
import time
import xlrd
import xlwt


class SystemInitPage(MyWindow):
    '''
    系统平台配置页面（导入页面的子页面）
    '''
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.setAttribute(Qt.WA_StyledBackground, False)
        # 窗口置顶
        # self.setWindowFlag(Qt.WindowStaysOnTopHint)
        self.setWindowModality(Qt.ApplicationModal)
        # 父窗口实例对象
        self.my_parent_window = kwargs['my_parent']
        # 窗口标题
        self.label_title = QLabel(self)
        self.label_title.resize(230, 40)
        self.label_title.setText('ES系统平台 目标配置')
        self.label_title.move(10, 5)

        # ------ 特殊部分 供货商列表初始化 ---------------------------------------------
        self.supplylist = []
        # ------ 特殊部分 供货商列表初始化 ---------------------------------------------

        # 当前类型(资料、实体)
        self.target_type = None

        # 字段类型字典初始化
        self.field_type = {
            "A": "混合附件型，实际存放的是各种附件的RUID",
            "B": "分类节点",
            "C": "字符型",
            "D": "日期型",
            "E": "电子书附件类型",
            "F": "文件附件型，即存放的是文件信息的RUID",
            "G": "图像型，实际存放的是图像文件的RUID",
            "H": "布尔型，即只能存放1或0",
            "I": "视频文件附件",
            "J": "主题枚举",
            "K": "相关资源",
            "L": "长整型",
            "M": "多行文本",
            "N": "数值型",
            "O": "实体类型",
            "P": "音频文件附件",
            "Q": "URL附件型，即存放的是静态URL信息的RUID",
            "R": "文档文件附件，包括pdf、word、excel、ppt、txt等",
            "S": "光盘镜像附件",
            "U": "文件夹附件",
            "X": "超文本备注型",
            "Y": "保密级别型",
        }
        # 当前表列表
        self.table_list = []
        # 当前字段列表
        self.field_list = []
        # 加载基本选项卡
        self.setup_ui()
        # 加载表格
        self.init_table()
        # 加载常规按钮（确定取消）
        self.init_common_btn()
        # 全选flag
        # self.check_flag = False

    def setup_ui(self):
        '''
        加载三个选择框，用于定位数据表
        :return:
        '''
        cf = self.get_init_file_cf()
        server_name = cf.get("es_db_init", "server_name")
        # port = cf.get("es_db_init", "port")

        # es服务器ip label -------------------------------------------------
        self.es_db_ip_label = QLabel(self)
        self.es_db_ip_label.setText('服务器地址：')
        self.es_db_ip_label.move(50, 70)
        # es服务器ip 输入框
        self.es_db_ip_input = QLineEdit(self)
        self.es_db_ip_input.setText(server_name)
        self.es_db_ip_input.setFixedWidth(460)
        self.es_db_ip_input.move(160, 67)

        # # es服务器端口 label -------------------------------------------------
        # self.es_db_port_label = QLabel(self)
        # self.es_db_port_label.setText('端口号：')
        # self.es_db_port_label.move(320, 70)
        # # es服务器端口 输入框
        # self.es_db_port_input = QLineEdit(self)
        # self.es_db_port_input.setText(port)
        # self.es_db_port_input.setFixedWidth(120)
        # self.es_db_port_input.move(400, 67)

        # 测试连接btn -------------------------------------------------
        self.test_btn = QPushButton(self)
        self.test_btn.setText('测试连接')
        self.test_btn.move(710, 55)
        self.test_btn.resize(130, 75)
        self.test_btn.clicked.connect(self.connect_es)

        # 选择数据类型label -------------------------------------------------
        self.datatype_label = QLabel(self)
        self.datatype_label.setText('选择数据类型：')
        self.datatype_label.move(50, 110)
        # 数据类型下拉选择框
        self.datatype_combo = QComboBox(self)
        self.datatype_combo.setView(QListView())  # 通过setView和全局qss设置行高
        # self.datatype_combo.addItems(['选择类型', '资料', '基础表'])
        self.datatype_combo.setFixedWidth(120)
        self.datatype_combo.move(160, 107)

        # 选择表label -------------------------------------------------
        self.table_name_label = QLabel(self)
        self.table_name_label.setText('选择内容：')
        self.table_name_label.move(320, 110)
        # 数据库下拉选择框
        self.table_name_combo = QComboBox(self)
        self.table_name_combo.setView(QListView())  # 通过setView和全局qss设置行高
        # self.datatype = self.datatype_combo.currentText()
        # self.table_name_combo.addItems([self.datatype, ])
        self.table_name_combo.setFixedWidth(220)
        self.table_name_combo.move(400, 107)

        # 导入数据状态选择label -------------------------------------------------
        self.is_data_show_label = QLabel(self)
        self.is_data_show_label.setText('数据导入后是否在前台展示：')
        self.is_data_show_label.move(50, 150)
        # 导入数据状态选择框
        self.is_data_show_comb = QComboBox(self)
        self.is_data_show_comb.setView(QListView())  # 通过setView和全局qss设置行高
        # self.datatype_combo.addItems(['选择类型', '资料', '基础表'])
        self.is_data_show_comb.setFixedWidth(120)
        self.is_data_show_comb.move(250, 147)

        # ------ 特殊部分 供货商选择 ---------------------------------------------
        self.choice_supply_label = QLabel(self)
        self.choice_supply_label.setText('选择供货商：')
        self.choice_supply_label.move(400, 150)
        # 导入数据状态选择框
        self.choice_supply_comb = QComboBox(self)
        self.choice_supply_comb.setView(QListView())  # 通过setView和全局qss设置行高
        # self.datatype_combo.addItems(['选择类型', '资料', '基础表'])
        self.choice_supply_comb.setFixedWidth(120)
        self.choice_supply_comb.move(500, 147)

        # 表监听数据类型，数据类型改变就切换表 -------------------------------------------------
        def init_table_name(data_type):
            '''
            从配置文件中获取当前服务器的数据库队列 并载入 combo2选择框中
            :return:
            '''
            if not data_type:
                return
            print('data_type: {0}'.format(data_type))
            self.target_type = data_type
            # self.table_name_combo.clear()
            if qApp.cx_es_data_type_dict[self.target_type] == 1:    # 资料编码是1
                # url = self.my_parent_window.es_url + '/import/datamodellist'
                # url = qApp.cx_es_db_ip + '/import/datamodellist'

                url = qApp.cx_es_db_ip + '/dataprocessingapi/systeminfo/datamodellist.action' + '?customerocde={0}'.format(qApp.cur_custom_dict['customercode'])
                # url = qApp.cx_es_db_ip + '/dataprocessingapi/systeminfo/datamodellist.action'

                print(url)
                res = requests.get(url, verify=False)
                print(res.text)
                self.table_list = json.loads(res.text)['returnvalue']['datamodel'] if (res.text and res.status_code == 200) else None
                if self.table_list:
                    print(self.table_list)
                    self.table_name_combo.clear()
                    self.table_name_combo.addItems(key['label'] for key in self.table_list)
                else:
                    print('请求不到es表')
            if qApp.cx_es_data_type_dict[self.target_type] == 2:    # 实体编码是2
                # url = qApp.cx_es_db_ip + '/import/datamodellist'
                # url = qApp.cx_es_db_ip + '/import/entitytypelist'

                url = qApp.cx_es_db_ip + '/dataprocessingapi/systeminfo/entitytypelist.action' + '?customerocde={0}'.format(qApp.cur_custom_dict['customercode'])
                # url = qApp.cx_es_db_ip + '/dataprocessingapi/systeminfo/entitytypelist.action'

                print(url)
                res = requests.get(url, verify=False)
                print(res.text)
                self.table_list = json.loads(res.text)['returnvalue']['entity'] if res.text else None
                if self.table_list:
                    # 删除附件选项
                    table = [table for table in self.table_list if table['name'] == 'appendix']
                    if table:
                        self.table_list.remove(table[0])
                    print(self.table_list)
                    self.table_name_combo.clear()
                    self.table_name_combo.addItems(key['label'] for key in self.table_list)
                else:
                    print('请求不到es表')
                # print("实体还没开始整")
            if qApp.cx_es_data_type_dict[self.target_type] == 3:    # 附件编码是3
                # url = qApp.cx_es_db_ip + '/import/datamodellist'
                # url = qApp.cx_es_db_ip + '/import/entitytypelist'

                url = qApp.cx_es_db_ip + '/dataprocessingapi/systeminfo/entitytypelist.action' + '?customerocde={0}'.format(qApp.cur_custom_dict['customercode'])
                # url = qApp.cx_es_db_ip + '/dataprocessingapi/systeminfo/entitytypelist.action'
                print(url)
                res = requests.get(url, verify=False)
                # print(res.text)
                self.table_list = json.loads(res.text)['returnvalue']['entity'] if res.text else None
                if self.table_list:
                    # self.table_list = [table for table in self.table_list if table['name'] == 'appendix']
                    self.ret_table_list = ['所有资料', ] + [table['label'] for table in self.data_list]
                    print(self.table_list)
                    self.table_name_combo.clear()
                    self.table_name_combo.addItems(self.ret_table_list)
                else:
                    print('请求不到es表')
        self.datatype_combo.currentTextChanged.connect(init_table_name)


    #     # 表监听数据库，数据库改变就切换表 -------------------------------------------------
    #     def init_table_name():
    #         '''
    #         查询 mysql，获取当前数据库中的所有表名 并载入 combo3选择框中
    #         :return:
    #         '''
    #         self.db_name = self.combo2.currentText()
    #         self.combo3.clear()
    #         if self.server_name and self.db_name:
    #             print(self.server_name, self.db_name)
    #             mop = MySqlOp(host=self.server_name, db_name=self.db_name)
    #             table_list = mop.select("""show tables""")
    #             print(table_list)
    #             self.combo3.addItems(key[0] for key in table_list)
    #     self.combo2.currentIndexChanged.connect(init_table_name)

    def get_init_file_cf(self):
        cf = configparser.ConfigParser()
        print(qApp.cx_project_root + r'/init_file/init/es_db_init.ini')
        cf.read(qApp.cx_project_root + r'/init_file/init/es_db_init.ini', encoding="utf-8-sig")
        return cf

    def init_write(self, cf):
        cf.write(open(qApp.cx_project_root + r'/init_file/init/es_db_init.ini', "w", encoding="utf-8-sig"))

    def connect_es(self):
        '''
        1.保存 服务器 和 端口号 到配置文件
        2.请求资料表并展示
        :return:
        '''
        server = self.es_db_ip_input.text()
        # port = self.es_db_port_input.text()
        cf = self.get_init_file_cf()
        cf.set("es_db_init", "server_name", server)
        # cf.set("es_db_init", "port", port)
        self.init_write(cf)

        # 获取全部资料url
        # self.data_url = server + '/platform/import/datamodellist'
        # self.data_url = qApp.cx_es_db_ip + '/dataprocessingapi/systeminfo/datamodellist.action' + '?customerocde={0}'.format(qApp.cur_custom_dict['customercode'])
        self.data_url = qApp.cx_es_db_ip + '/dataprocessingapi/systeminfo/datamodellist.action'
        print(self.data_url)
        # try:
        res = requests.get(self.data_url, timeout=0.5, verify=False)
        print(res.text)
        # if res.status_code != 200 or json.loads(res.text)['cxajaxrc'] == '-1':
        # 连接成功，挂载 服务器IP地址 到 qApp
        # qApp.cx_es_db_ip = server + '/platform'
        qApp.cx_es_db_ip = server
        # print(res.status_code)
        # print(res.text)

        self.datatype_combo.clear()
        self.datatype_combo.addItems(['基础表', '资料', '附件'])
        self.datatype_combo.setCurrentText('基础表')

        self.is_data_show_comb.clear()
        self.is_data_show_comb.addItems(['是', '否'])

        # ------ 特殊部分 供货商选框刷新 ---------------------------------------------
        self.choice_supply_comb.clear()
        self.choice_supply_comb.addItems(self.get_supply())
        # ------ 特殊部分 供货商选框刷新 ---------------------------------------------

        # 获取资料名称队列
        self.data_list = json.loads(res.text)['returnvalue']['datamodel']
        # print('self.data_list: {0}'.format(self.data_list))

        # self.table_list = json.loads(res.text)['datamodel'] if res.text else None
        # if self.table_list:
        #     print(self.table_list)
        #     self.table_name_combo.clear()
        #     self.table_name_combo.addItems(key['label'] for key in self.table_list)
        # except Exception as e:
        #     print(e)
        #     self.datatype_combo.clear()
        #     self.table_name_combo.clear()
        #     self.table1.clear()
        #     self.connect_info = InfoBox('连接失败')
        #     self.connect_info.show()
        #     return

    def init_table(self):
        '''
        加载数据表
        :return:
        '''
        self.table1 = QTableWidget(self)
        self.table1.resize(800, 280)
        self.table1.move(50, 190)
        # 设置表格的列数为4列
        self.table1.setColumnCount(4)
        # 设置表格每列的宽度
        self.table1.setColumnWidth(0, 170)
        self.table1.setColumnWidth(1, 170)
        self.table1.setColumnWidth(2, 170)
        self.table1.setColumnWidth(3, 170)
        # self.table1.setColumnWidth(4, 95)
        self.table1.setHorizontalHeaderLabels(["字段名称", "数据类型", "是否必备", "是否可重复"])
        # 刷新表格
        # self.refresh()
        # 表格监听表，如果表选择框改变，那么刷新表格
        self.table_name_combo.currentIndexChanged.connect(self.refresh)

    # 刷新表格
    def refresh(self, index):
        '''
        刷新表格的方法，此方法被绑定到 table_name_combo上
        :return:
        '''
        if qApp.cx_es_data_type_dict[self.target_type] == 1:  # 资料编码是1
            # 获取该表的元数据
            current_table_code = self.table_list[index]['code']
            print('code: {0}'.format(current_table_code))
            print('name: {0}'.format(self.table_list[index]['name']))
            # url = qApp.cx_es_db_ip + '/import/metadatalist?datamodel={0}'.format(current_table_code)
            # url = qApp.cx_es_db_ip + '/import/metadatalist?datamodel={0}'.format(current_table_code)
            # url = qApp.cx_es_db_ip + '/dataprocessingapi/systeminfo/metadatalist.action?datamodel={0}&customerocde={1}'.format(current_table_code, qApp.cur_custom_dict['customercode'])
            url = qApp.cx_es_db_ip + '/dataprocessingapi/systeminfo/metadatalist.action?datamodel={0}'.format(current_table_code)
            print(url)
            res = requests.get(url, verify=False)
            print(res.text)
            field_dict = json.loads(res.text) if res.text else None
            if not field_dict:
                print("服务器估计挂了")
                return
            # 请求结果状态
            state = field_dict['cxajaxrc']
            if state == '-1':
                print("未找到表的对应字段: {0}".format(field_dict['cxajaxerrmsg']))
                return

            # 字段列表
            self.field_list = field_dict['returnvalue']['metadata']
            if self.field_list:
                # # 删除 350050001 字段 -------------------------------------------
                # for i, item in enumerate(field_dict['metadata']):
                #     if item['code'] == 350050001:
                #         self.field_list.remove(item)
                # # 删除 350050001 字段 -------------------------------------------
                # 删除 15900001 字段，将 15900011 中文名改为 作者 ----------------------
                for i, item in enumerate(field_dict['returnvalue']['metadata']):
                    if item['code'] == 15900001:
                        self.field_list.remove(item)
                    if item['code'] == 15900012:
                        self.field_list[i]['label'] = '作者'
                # 删除 15900001 字段，将 15900011 中文名改为 作者 ----------------------
                # 将 2020103001 中文名改为 学科字符分类号 ----------------------
                for i, item in enumerate(field_dict['returnvalue']['metadata']):
                    if item['code'] == 2020103001:
                        self.field_list[i]['label'] = '学科字符分类号'
                # 将 2020103001 中文名改为 学科字符分类号 ----------------------
                # 将 2019081901 中文名改为 calis学科分类号 ----------------------
                for i, item in enumerate(field_dict['returnvalue']['metadata']):
                    if item['code'] == 2019081901:
                        self.field_list[i]['label'] = 'calis学科分类号'
                # 将 2019081901 中文名改为 calis学科分类号 ----------------------
                # 将 2020100601 中文名改为 calis学科分类号 ----------------------
                for i, item in enumerate(field_dict['returnvalue']['metadata']):
                    if item['code'] == 2020100601:
                        self.field_list[i]['label'] = '主题分类号'
                # 将 2020100601 中文名改为 calis学科分类号 ----------------------
                # print(self.field_list)

                self.table1.clear()
                # 设置表格的列数为4列
                self.table1.setColumnCount(4)
                # 设置表格的列数为4列
                self.table1.setRowCount(len(self.field_list))
                # 设置表格每列的宽度
                self.table1.setColumnWidth(0, 200)
                self.table1.setColumnWidth(1, 230)
                self.table1.setColumnWidth(2, 160)
                self.table1.setColumnWidth(3, 160)
                # self.table1.setColumnWidth(4, 90)
                self.table1.setHorizontalHeaderLabels(["中文名称", "数据类型", "是否必备", "是否可重复"])
                for i, field in enumerate(self.field_list):
                    self.table1.setItem(i, 0, QTableWidgetItem(field['label']))
                    self.table1.setItem(i, 1, QTableWidgetItem(self.field_type[field['type']] if 'type' in field else ''))
                    self.table1.setItem(i, 2, QTableWidgetItem('必须提供' if int(field['mustflag']) else '非必须'))
                    self.table1.setItem(i, 3, QTableWidgetItem('可重复' if int(field['repeatable']) else '不可重复'))
                    # is_import_checkbox = QCheckBox()
                    # # 如果该字段为必须字段，那么设置checkbox为选中，并且置灰
                    # if int(field['mustflag']):
                    #     is_import_checkbox.setEnabled(False)
                    #     is_import_checkbox.setChecked(True)
                    # self.table1.setCellWidget(i, 4, is_import_checkbox)
                    # self.table1.cellWidget(i, 4).setStyleSheet("margin-left: 40px;")
            else:
                print('请求不到es表')
                self.table1.clear()
        if qApp.cx_es_data_type_dict[self.target_type] == 2:    # 实体编码是2
            # 获取该表的元数据
            current_table_code = self.table_list[index]['name']
            print('code: {0}'.format(current_table_code))
            print('name: {0}'.format(self.table_list[index]['name']))
            # url = qApp.cx_es_db_ip + '/import/metadatalist?datamodel={0}'.format(current_table_code)
            # url = qApp.cx_es_db_ip + '/import/fieldlist?entity={0}'.format(current_table_code)
            # url = qApp.cx_es_db_ip + '/dataprocessingapi/systeminfo/fieldlist.action?entity={0}&customerocde={1}&sysruid={2}'.format(current_table_code, qApp.cur_custom_dict['customercode'], qApp.cur_application_dict['applicationid'])
            url = qApp.cx_es_db_ip + '/dataprocessingapi/systeminfo/fieldlist.action?entity={0}'.format(current_table_code)
            print(url)
            res = requests.get(url, verify=False)
            field_dict = json.loads(res.text) if res.text else None
            if not field_dict:
                print("服务器估计挂了")
                return
            # 请求结果状态
            state = field_dict['cxajaxrc']
            if state == '-1':
                print("未找到表的对应字段: {0}".format(field_dict['cxajaxerrmsg']))
                return
            # 字段列表
            self.field_list = field_dict['returnvalue']['field']
            if self.field_list:

                # # 如果 ----------------------
                # if self.table_list[self.table_name_combo.currentIndex()]['name'] == 'category6'
                # # for i, item in enumerate(field_dict['metadata']):
                # #     if item['code'] == 15900001:
                # #         self.field_list.remove(item)
                # #     if item['code'] == 15900012:
                # #         self.field_list[i]['label'] = '作者'
                print(self.field_list)
                # # 删除 15900001 字段，将 15900011 中文名改为 作者 ----------------------

                self.table1.clear()
                # 设置表格的列数为4列
                self.table1.setColumnCount(2)
                # 设置表格的列数为4列
                self.table1.setRowCount(len(self.field_list))
                # 设置表格每列的宽度
                self.table1.setColumnWidth(0, 200)
                self.table1.setColumnWidth(1, 230)
                self.table1.setHorizontalHeaderLabels(["中文名称", "字段名称"])
                for i, field in enumerate(self.field_list):
                    self.table1.setItem(i, 0, QTableWidgetItem(field['label']))
                    self.table1.setItem(i, 1, QTableWidgetItem(field['name']))
            else:
                print('请求不到es表')
                self.table1.clear()

        if qApp.cx_es_data_type_dict[self.target_type] == 3:  # 实体编码是3
            # 获取该表的元数据
            # current_table_code = self.table_list[index]['name']
            # print('code: {0}'.format(current_table_code))
            # print('name: {0}'.format(self.table_list[index]['name']))
            # url = qApp.cx_es_db_ip + '/import/metadatalist?datamodel={0}'.format(current_table_code)
            fujian = 'appendix'
            # url = qApp.cx_es_db_ip + '/import/fieldlist?entity={0}'.format(fujian)
            # url = qApp.cx_es_db_ip + '/dataprocessingapi/systeminfo/fieldlist.action?entity={0}&customerocde={1}&sysruid={2}'.format(fujian, qApp.cur_custom_dict['customercode'], qApp.cur_application_dict['applicationid'])
            url = qApp.cx_es_db_ip + '/dataprocessingapi/systeminfo/fieldlist.action?entity={0}'.format(fujian)

            res = requests.get(url, verify=False)
            field_dict = json.loads(res.text) if res.text else None
            if not field_dict:
                print("服务器估计挂了")
                return
            # 请求结果状态
            state = field_dict['cxajaxrc']
            if state == '-1':
                print("未找到表的对应字段: {0}".format(field_dict['cxajaxerrmsg']))
                return
            # 字段列表
            self.field_list = field_dict['returnvalue']['field']
            if self.field_list:

                # # 如果 ----------------------
                # if self.table_list[self.table_name_combo.currentIndex()]['name'] == 'category6'
                # # for i, item in enumerate(field_dict['metadata']):
                # #     if item['code'] == 15900001:
                # #         self.field_list.remove(item)
                # #     if item['code'] == 15900012:
                # #         self.field_list[i]['label'] = '作者'
                print(self.field_list)
                # # 删除 15900001 字段，将 15900011 中文名改为 作者 ----------------------

                self.table1.clear()
                # 设置表格的列数为4列
                self.table1.setColumnCount(2)
                # 设置表格的列数为4列
                self.table1.setRowCount(len(self.field_list))
                # 设置表格每列的宽度
                self.table1.setColumnWidth(0, 200)
                self.table1.setColumnWidth(1, 230)
                self.table1.setHorizontalHeaderLabels(["中文名称", "字段名称"])
                for i, field in enumerate(self.field_list):
                    self.table1.setItem(i, 0, QTableWidgetItem(field['label']))
                    self.table1.setItem(i, 1, QTableWidgetItem(field['name']))
            else:
                print('请求不到es表')
                self.table1.clear()

    # ------ 特殊部分 获取供货商列表---------------------------------------------
    def get_supply(self):
        '''
        获取供应商列表
        :return:
        '''
        url = qApp.cx_es_db_ip + '/dataprocessingapi/systeminfo/getsupplierlist.action'
        print(url)
        res = requests.get(url, verify=False)
        field_dict = json.loads(res.text) if res.text else None
        if not field_dict:
            print("服务器估计挂了")
            return
        # 请求结果状态
        state = field_dict['cxajaxrc']
        if state == '-1':
            print("未找到表的对应字段: {0}".format(field_dict['cxajaxerrmsg']))
            return

        # 供货商字典列表挂载
        self.supplylist = field_dict['supplylist']
        print("self.supplylist: {0}".format(len(self.supplylist)))
        # 供货商列表加载到选框中
        supply_name_list = []
        for dic in self.supplylist:
            supply_name_list.append([dic[d] for d in dic][0])
        print("supply_name_list: {0}".format(len(supply_name_list)))
        return supply_name_list

    # ------ 特殊部分 获取供货商列表---------------------------------------------



    #     self.table_name = self.combo3.currentText()
    #     if self.server_name and self.db_name:
    #         mop = MySqlOp(host=self.server_name, db_name=self.db_name)
    #         # 查询 对应数据库下对应表的 字段名，字段类型，字段说明
    #         field_list = mop.select(
    #             """select COLUMN_NAME,DATA_TYPE,COLUMN_COMMENT from information_schema.COLUMNS where table_name = '{0}' and table_schema = '{1}'""".format(
    #                 self.table_name, self.db_name))
    #         # 第一条是主键id，该字段自动生成不用导入
    #         field_list = field_list[1:]
    #         # 设置表格行数为查询数据的长度
    #         self.table1.setRowCount(len(field_list))
    #         # self.table1.setRowHeight(0, 0)
    #
    #         # 设置表格每列的宽度
    #         self.table1.setColumnWidth(0, 220)
    #         self.table1.setColumnWidth(1, 220)
    #         self.table1.setColumnWidth(2, 220)
    #         self.table1.setColumnWidth(3, 95)
    #         # print(field_list)
    #         # 填充字段
    #         self.table1.clear()
    #         self.table1.setHorizontalHeaderLabels(["字段名称", "数据类型", "字段说明", "是否导入"])
    #
    #         for i, field in enumerate(field_list):
    #             for k, f_type in enumerate(field):
    #                 self.table1.setItem(i, k, QTableWidgetItem(f_type))
    #             self.table1.setCellWidget(i, 3, QCheckBox())
    #             self.table1.cellWidget(i, 3).setStyleSheet("margin-left: 40px;")
    #
    def init_common_btn(self):
        '''
        底部的 确定 和 取消 按钮
        :return:
        '''
        # 确定按钮
        self.btn2 = QPushButton(self)
        self.btn2.setText("确定")
        self.btn2.move(620, 480)
        self.btn2.clicked.connect(self.field_get)

        # 取消按钮
        self.btn3 = QPushButton(self)
        self.btn3.setText("取消")
        self.btn3.move(720, 480)
        # 点击取消，触发右上角关闭按钮事件
        self.btn3.clicked.connect(self.close_btn.click)

    def field_get(self):
        # 如果选框为空，说明连接失败或未连接，那么返回即可
        if not self.datatype_combo.currentText():
            self.qxljsjk_box = InfoBox("请先测试连接")
            self.qxljsjk_box.show()
            return

        # 除去主外键字段
        # target_field_list = []
        # for field in self.field_list:
        #     if field['name'] != 'p_id' and field['name'] != 'p_table' and field['name'] != 'f_id' and field['name'] != 'f_table':
        #         target_field_list.append(field)

        target_name = 'es'
        # 选择了资料 --------------------start------------------------------------------
        if qApp.cx_es_data_type_dict[self.target_type] == 1:    # 资料编码是1
            target_name_list = []
            for field in self.field_list:
                # if field['name'] != 'p_id' and field['name'] != 'p_table' and field['name'] != 'f_id' and field['name'] != 'f_table':
                target_name_list.append('{0}[{1}]'.format(field['label'], field['code']))
            # print(target_name_list)
            # target_input 赋值
            # self.my_parent_window.daoru_input2.setText(','.join(target_name_list))
            # print(target_list)
            # target_dict 赋值
            self.my_parent_window.target_dict = {
                # 来源名称
                'name': target_name,
                # 资料是1， 实体是2， 附件是3
                'target_type': qApp.cx_es_data_type_dict[self.target_type],  # 数据类型编码
                # 元数据编码（类似于表名）
                'target_table_code': self.table_list[self.table_name_combo.currentIndex()]['code'],  # 表名
                # 导入目标整理后的字段（类似于表中的字段名）
                'target_name_list': target_name_list,
                # 导入目标原始字段内容
                'target_field_list': self.field_list,
                'import_status': 'A' if self.is_data_show_comb.currentText() == '是' else 'N',

                # ----- 特殊部分 中科供应商参数 -------------------------
                "supplycustomer": [d for d in self.supplylist[self.choice_supply_comb.currentIndex()].keys()][0]
                # ----- 特殊部分 中科供应商参数 -------------------------

            }
            print('数据类型: {0}'.format(self.table_list[self.table_name_combo.currentIndex()]['code']))
            # print('资料: {0}'.format(self.my_parent_window.target_dict))
            # 获取目标信息挂载到全局
            qApp.cx_tgt = self.my_parent_window.target_dict
            print('qApp.cx_tgt: {0}'.format(qApp.cx_tgt))
            # print("self.choice_supply_comb.currentIndex(): {0}".format(self.choice_supply_comb.currentIndex()))
            # print("[d[0] for d in self.supplylist[self.choice_supply_comb.currentIndex()]]: {0}".format([d[0] for d in self.supplylist[self.choice_supply_comb.currentIndex()]]))
            # print("[d[0] for d in self.supplylist[self.choice_supply_comb.currentIndex()]][0]: {0}".format([d[0] for d in self.supplylist[self.choice_supply_comb.currentIndex()]][0]))
        # 选择了资料 --------------------end------------------------------------------

        # 选择了实体 --------------------start------------------------------------------
        if qApp.cx_es_data_type_dict[self.target_type] == 2:    # 实体编码是2
            target_name_list = []
            for field in self.field_list:
                # if field['name'] != 'p_id' and field['name'] != 'p_table' and field['name'] != 'f_id' and field['name'] != 'f_table':
                target_name_list.append('{0}[{1}]'.format(field['label'], field['name']))

            # print(target_list)
            # target_dict 赋值
            self.my_parent_window.target_dict = {
                # 来源名称
                'name': target_name,
                # 资料是1， 实体是2， 附件是3
                'target_type': qApp.cx_es_data_type_dict[self.target_type],  # 数据类型编码
                # 元数据编码（类似于表名）
                'target_table_code': self.table_list[self.table_name_combo.currentIndex()]['name'],  # 表名
                # 导入目标整理后的字段（类似于表中的字段名）
                'target_name_list': target_name_list,
                # 导入目标原始字段内容
                'target_field_list': self.field_list,
                'import_status': 'A' if self.is_data_show_comb.currentText() == '是' else 'N'
            }
            # print('实体: {0}'.format(self.my_parent_window.target_dict))
            # 获取目标信息挂载到全局
            qApp.cx_tgt = self.my_parent_window.target_dict
        # 选择了实体 --------------------end------------------------------------------

        # 选择了附件 --------------------start------------------------------------------
        if qApp.cx_es_data_type_dict[self.target_type] == 3:  # 附件编码是3
            target_name_list = []
            for field in self.field_list:
                # if field['name'] != 'p_id' and field['name'] != 'p_table' and field['name'] != 'f_id' and field['name'] != 'f_table':
                target_name_list.append('{0}[{1}]'.format(field['label'], field['name']))

            # 整理后的资料元数据字段列表 -----------------start------------------------------------
            cur_table_name = self.table_name_combo.currentText()
            if cur_table_name == '所有资料':
                cur_table_code = ''
                relate_data_list = [
                    '无',
                    '{0}[{1}]'.format('唯一索引', 2020111710),
                    '{0}[{1}]'.format('表名', 2020111711),
                ]
            else:
                cur_table_code = [table['code'] for table in self.data_list if table['label'] == cur_table_name][0]
                url = qApp.cx_es_db_ip + '/import/metadatalist?datamodel={0}'.format(cur_table_code)
                # print('url: {0}'.format(url))
                res = requests.get(url, verify=False)
                field_list = json.loads(res.text)['metadata'] if res.text else None
                relate_data_list = ['无', ] + ['{0}[{1}]'.format(field['label'], field['code']) for field in field_list]
                # print('field_dict: {0}'.format(field_dict))
            # 整理后的资料元数据字段列表 -----------------end------------------------------------

            # print(target_list)
            # target_dict 赋值
            self.my_parent_window.target_dict = {
                # 来源名称
                'name': target_name,
                # 资料是1， 实体是2， 附件是3
                'target_type': qApp.cx_es_data_type_dict[self.target_type],  # 数据类型编码
                # 元数据编码（类似于表名）
                'target_table_code': cur_table_code,  # 表名
                # 导入目标整理后的字段（类似于表中的字段名）
                'target_name_list': target_name_list,
                # 导入目标原始字段内容
                'target_field_list': self.field_list,
                # 选择挂载的资料类型
                # 'relate_data_type': cur_table_code,
                # 整理后的资料元数据字段列表
                'relate_data_list': relate_data_list,
                'import_status': 'A' if self.is_data_show_comb.currentText() == '是' else 'N'
            }
            # print('实体: {0}'.format(self.my_parent_window.target_dict))
            # 获取目标信息挂载到全局
            qApp.cx_tgt = self.my_parent_window.target_dict
        # 选择了附件 --------------------end------------------------------------------

        # target_input 赋值
        # target_name = 'es系统平台'
        # server_name = self.es_db_ip_input.text()
        # port = self.es_db_port_input.text()
        data_type = self.datatype_combo.currentText()
        table = self.table_name_combo.currentText()
        # self.my_parent_window.daoru_input2.setText('_'.join([target_name, server_name, data_type, table]))
        self.my_parent_window.daoru_input2.setText('[{0}] - [{1}]'.format(data_type, table))
        self.close_btn.click()

    def keyPressEvent(self, QKeyEvent):  # 键盘某个键被按下时调用
        '''
        按下 ESC关闭当前页
        :param QKeyEvent:
        :return:
        '''
        # 参数1  控件
        if QKeyEvent.key() == Qt.Key_Escape:  # 判断是否按下了ESC键
            self.close_btn.click()